package com.bjpowernode.crm.web.controller;

import com.bjpowernode.crm.pojo.Activity;
import com.bjpowernode.crm.pojo.User;
import com.bjpowernode.crm.service.ActivityService;
import com.bjpowernode.crm.utils.UUIDUtil;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.omg.CORBA.PUBLIC_MEMBER;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.*;


@Controller
@RequestMapping("activity")
public class activityController{
    @Resource
    private ActivityService activityService;




    //头部查询+页面展示
    @RequestMapping("queryByCondition")
    @ResponseBody
    public List<Activity> getByCondition(@RequestParam Map map){
        List<Activity> list = activityService.getByCondition(map);

        return list;
    }


    //添加功能
    @RequestMapping("addActivity.do")
    @ResponseBody
    public Map addActivity(Activity activity, HttpSession session){
        //设置id,
        activity.setId(UUIDUtil.getUUID());
        System.out.println(activity.getId());
        //设置creatBy创建人
        User loginUser =(User)session.getAttribute("loginUser");
        String createBy =loginUser.getName()+"|"+loginUser.getLoginAct();
        activity.setCreateBy(createBy);

        //设置创建时间：creatTime:也就是当前时间：并将当前时间转为字符串
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //获取当前事件
        Date date = new Date();
        String createTime = sdf.format(date);
        activity.setCreateTime(createTime);

        activityService.addActivity(activity);
        return new HashMap(){{
            put("success",true);
            put("msg","添加成功");
        }};
    }
    //编辑功能：数据回显
    @RequestMapping("getEditData.json")
    @ResponseBody
    public Activity getEditData(String id){
        Activity activity = activityService.getEditData(id);
        System.out.println(activity);
        return activity;
    }

    //编辑功能：提交数据
    @RequestMapping("editAct.do")
    @ResponseBody
    public Map editActivity(Activity activity,HttpSession session){
        System.out.println("进来了");

        //编辑者
        User user = (User)session.getAttribute("loginUser");

        activity.setEditBy(user.getLoginAct()+"|"+user.getName());
        //获取编辑时间
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //获取当前时间：
        Date date = new Date();
        String editTime = sdf.format(date);
        activity.setEditTime(editTime);
        activityService.editActivity(activity);
        return new HashMap(){{
            put("success",true);
            put("msg","编辑成功！");
        }};
    }


    //删除功能
    @RequestMapping("delActivity.do")
    @ResponseBody
    public Map delAct(String[] ids){
        System.out.println("ids:"+Arrays.toString(ids));
        activityService.delAct(ids);
        return new HashMap(){{
            put("success",true);
            put("msg","删除成功！");
        }};
    }

    //导出功能
    @RequestMapping("export.do")
        public void exportExcel(HttpServletResponse response){
            //创建excel对象:添加对象前：记得加如excel依赖
            HSSFWorkbook excel = new HSSFWorkbook();

            //创建页签：sheet1 sheet2 sheet3
            HSSFSheet sheet = excel.createSheet();

            //创建行（标题行）：标题行一般第一行：索引为0
            int rowIndex=0;
            HSSFRow sheetRow = sheet.createRow(rowIndex++);
            //创建：行中的列
            int cellIndex=0;
            //设置标题行中第一列并设置列名
            sheetRow.createCell(cellIndex++).setCellValue("名称");//第一行的第一列
            sheetRow.createCell(cellIndex++).setCellValue("所有者");//第一行的第二列
            sheetRow.createCell(cellIndex++).setCellValue("开始日期");//第一行的第三列
            sheetRow.createCell(cellIndex++).setCellValue("结束日期");//第一行的第四列

            //设置并获取表格内容：通过访问数据库获取：根据要求访问数据库
            //因为一条数据一个对象，多条数据多个对象，所以用集合接收
            List<Activity> list = activityService.getByCondition(new HashMap());
            for (Activity activity : list) {
                //增加一行在标题行下
                //注意：每次循环完，列都要从0开始哦
                //遍历对象：获取对象的属性并设置创建为对应的列
                cellIndex=0;
                //创建行数：因为第一行已经创建为列名了：接收列名下的内容，从第二行开始
                //遍历完集合中的一个对象就自增创建下一行！
                HSSFRow sheetRow1 = sheet.createRow(rowIndex++);
                //根据已经创建的行，创建对应的列并赋值
                sheetRow1.createCell(cellIndex++).setCellValue(activity.getName());
                sheetRow1.createCell(cellIndex++).setCellValue(activity.getOwner());
                sheetRow1.createCell(cellIndex++).setCellValue(activity.getStartDate());
                sheetRow1.createCell(cellIndex++).setCellValue(activity.getEndDate());
            }
            //将遍历获取的表格内容输出
            //注意：设置输出的响应头；"attachment;filename=data.xls"表示文件导出后的文件名为data.xls
            response.setHeader("Content-Disposition", "attachment;filename=data.xls");
            //获取流并输出
            try {
                excel.write(response.getOutputStream());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //导入功能
    @RequestMapping("import.do")
    @ResponseBody
    public Map importExcel(MultipartFile upFile,HttpSession session){
            try {
            //获取上传excel文件：固定写法
            HSSFWorkbook excel = new HSSFWorkbook(upFile.getInputStream());
            //获取页签：通过索引获取，只有一个则为0，如果有多个，循环迭代索引即可
            HSSFSheet sheetAt = excel.getSheetAt(0);
            //声明一个变量  HSSFRow row 来接收每次遍历页签获得的行，只有不为null,就说明有值
            HSSFRow row;
            int i=1;//因为第一行索引为0；是列名，前端已经写出来了，所以我们不用获取了，从第二行开始获取：第二行索引为1
            //声明集合接收：多条数据用集合接收，一条数据一个对象！固定思维
           List<Activity> list = new ArrayList<>();
            while ((row=sheetAt.getRow(i++)) !=null){//读取excel的每一行：如果没有值了，则为null
                Activity activity = new Activity();//必须每次循环的时候new一个新对象：因为每次获取的都是一条新纪录
                //获取的每一行的每一列 则赋值给对象的属性，并存入到数据库中！：注意：列的索引每次获取完一行内容都要从零开始
                int j=0;//列的索引：必须在循环中，因为每次读取完一行后，第二行的列索引又从0开始了；
                String cell = row.getCell(j++).getStringCellValue();//j=0;获取第一列
                activity.setName(cell);//并根据excel表中的内容，和对象的属性以及数据库中的字段名：一一对应赋值！
                activity.setOwner(row.getCell(j++).getStringCellValue());//j=1;获取第二列；并赋值给对象属性
                activity.setStartDate(row.getCell(j++).getStringCellValue());//j=2;获取第三列；并赋值给对象属性
                activity.setEndDate(row.getCell(j++).getStringCellValue());//j=3;获取第四列；并赋值给对象属性
                //一行数据就是一条记录就是一个对象，但是一个excel表中有许多条记录，所以我们需要集合把设置好的对象装起来
                //创建id：
                String id = UUIDUtil.getUUID();
               activity.setId(id);
                //获取创建时间，创建人
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                Date date = new Date();
                String format = sdf.format(date);
                activity.setCreateTime(format);
                User user = (User) session.getAttribute("loginUser");
                activity.setCreateBy(user.getLoginAct()+"|"+user.getName());
                list.add(activity);
            }
            System.out.println(list);
            activityService.addMoreActivity(list);

        } catch (IOException e) {
            e.printStackTrace();
        }

        return new HashMap(){{
            put("success",true);
            put("msg","导入成功！");
        }};
    }

    //展示活动细节
    @RequestMapping("showDetail.json")
    @ResponseBody
    public Activity getDetailById(String id){

        return activityService.getDetailById(id);
    }
}
